home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / gus / vts139b.zip / VTSCREEN.PAS < prev    next >
Pascal/Delphi Source File  |  1993-09-08  |  10KB  |  337 lines

  1. UNIT VTScreens;
  2.  
  3. INTERFACE
  4.  
  5. USES VTWins, VTCfg, VTPartitura,
  6.      SongUnit,
  7.      SwapManager,
  8.      Output43, Vid43;
  9.  
  10.  
  11. VAR
  12.   TopLineHandle   : TSwapHandle;
  13.   _2ndLineHandle  : TSwapHandle;
  14.   SamplesHandle   : TSwapHandle;
  15.   OscilloscHandle : TSwapHandle;
  16.   MenusHandle     : TSwapHandle;
  17.   SmallPartHandle : TSwapHandle;
  18.   BigPartHandle   : TSwapHandle;
  19.   CreditsHandle   : TSwapHandle;
  20.   F8DemoHandle    : TSwapHandle;
  21.  
  22. CONST
  23.   wfTopLine   = $0001;
  24.   wf2ndLine   = $0002;
  25.   wfSamples   = $0004;
  26.   wfOscillosc = $0008;
  27.   wfMenus     = $0010;
  28.   wfSmallPart = $0020;
  29.   wfBigPart   = $0040;
  30.   wfCredits   = $0080;
  31.   wfF8Demo    = $0100;
  32.  
  33.   ActiveWindows : WORD = 0;
  34.  
  35.   CreditWins          = wfTopLine + wfCredits;
  36.   BigWins             = wfTopLine + wfBigPart;
  37.   Small_SamplesWins   = wfTopLine + wf2ndLine + wfSamples   + wfSmallPart;
  38.   Small_OscilloscWins = wfTopLine + wf2ndLine + wfOscillosc + wfSmallPart;
  39.   Small_MenuWins      = wfTopLine + wf2ndLine + wfMenus     + wfSmallPart;
  40.   F8Demo              = wfTopLine + wf2ndLine + wfF8Demo;
  41.  
  42.  
  43.  
  44.  
  45. PROCEDURE InitVTScreens(VAR Song: TSong);
  46. PROCEDURE RefreshVTScreens;
  47.  
  48. PROCEDURE SetCredits;
  49. PROCEDURE SetBig;
  50. PROCEDURE SetSmall_Samples;
  51. PROCEDURE SetSmall_Oscillosc;
  52. PROCEDURE SetSmall_Menu;
  53. PROCEDURE SetNothing;
  54. PROCEDURE SetUser(w: WORD);
  55.  
  56.  
  57.  
  58.  
  59. IMPLEMENTATION
  60.  
  61. USES SongElements, Heaps;
  62.  
  63.  
  64. TYPE
  65.   PScreen = ^TScreen;
  66.   TScreen = ARRAY[1..90*63] OF WORD;
  67.  
  68. CONST
  69.   VirtualScreen : PScreen = NIL;
  70.   TempBuffer    : PScreen = NIL;
  71.  
  72.   NoDots : BOOLEAN = FALSE;
  73.  
  74.  
  75.  
  76. PROCEDURE PutDot;
  77.   BEGIN
  78.     IF NOT NoDots THEN
  79.       Write('o');
  80.   END;
  81.   
  82.  
  83.  
  84. PROCEDURE MySaveW(VAR Handle: TSwapHandle; x, y, w, h: WORD);
  85.   BEGIN
  86.     StoreWindow(POINTER(TempBuffer), x, y, w, h);
  87.     IF NOT NoDots THEN
  88.       Handle.Init;
  89.     Handle.Write(TempBuffer^, SavedWindowSize(POINTER(TempBuffer)));
  90.   END;
  91.  
  92.  
  93. PROCEDURE InitVTScreens(VAR Song: TSong);
  94.   VAR
  95.     SaveSeg : WORD;
  96.     SaveOfs : WORD;
  97.   BEGIN
  98.     IF VirtualScreen = NIL THEN
  99.       FullHeap.HGetMem(POINTER(VirtualScreen), SizeOf(VirtualScreen^));
  100.  
  101.     IF TempBuffer = NIL THEN
  102.       FullHeap.HGetMem(POINTER(TempBuffer), SizeOf(TempBuffer^));
  103.  
  104.                                                                           PutDot;
  105.     SaveSeg := ScrSegment;
  106.     SaveOfs := ScrOffset;
  107.     ScrSegment := SEG(VirtualScreen^);
  108.     ScrOffset  := OFS(VirtualScreen^);
  109.  
  110.     InitWinScreen;                                                        PutDot;
  111.     InitWinF8Line;                                                        PutDot;
  112.     InitWinTopLine;                                                       PutDot;
  113.  
  114.     IF NOT NoDots THEN
  115.       WITH w2ndLine DO MySaveW(F8DemoHandle, x, y+h-1, w, 1);             PutDot;
  116.  
  117.     InitWinScreen;                                                        PutDot;
  118.     InitWinTopLine;                                                       PutDot;
  119.     InitWin2ndLine;                                                       PutDot;
  120.     InitWinSamples;                                                       PutDot;
  121.     InitWinPart;                                                          PutDot;
  122.     RefreshModuleInfo(Song);                                              PutDot;
  123.     WITH wTopLine   DO MySaveW(TopLineHandle,      x,   y, w,   h-1);     PutDot;
  124.     WITH wSamples   DO MySaveW(SamplesHandle,      x,   y, w,   h  );     PutDot;
  125.  
  126.     IF NOT NoDots THEN
  127.       BEGIN
  128.  
  129.         InitWinMenus;                                                     PutDot;
  130.  
  131.         WITH w2ndLine   DO MySaveW(_2ndLineHandle,     x,   y,   w, h-1); PutDot;
  132.         WITH wMenus     DO MySaveW(MenusHandle,        x,   y,   w, h  ); PutDot;
  133.         WITH wPartSmall DO MySaveW(SmallPartHandle,    x,   y+1, w, h-1); PutDot;
  134.  
  135.         InitWinOscillosc;                                                 PutDot;
  136.         InitWinPart;                                                      PutDot;
  137.         WITH wOscillosc DO MySaveW(OscilloscHandle,    x,   y,   w, h  ); PutDot;
  138.  
  139.         InitWinBigPart;                                                   PutDot;
  140.         WITH wPartBig   DO MySaveW(BigPartHandle,      x,   y,   w, h-1); PutDot;
  141.  
  142.         InitWinCredits;                                                   PutDot;
  143.         WITH wCredits   DO MySaveW(CreditsHandle,      x,   y,   w, h  ); PutDot;
  144.  
  145.       END;
  146.  
  147.     ScrSegment := SaveSeg;
  148.     ScrOffset  := SaveOfs;
  149.  
  150.     NoDots := TRUE;
  151.  
  152.   END;
  153.  
  154.  
  155. (*
  156. PROCEDURE InitVTScreens;
  157.   VAR
  158.     SaveSeg : WORD;
  159.     SaveOfs : WORD;
  160.   BEGIN
  161.                                                                       PutDot;
  162.     SaveSeg := ScrSegment;
  163.     SaveOfs := ScrOffset;
  164.     ScrSegment := SEG(VirtualScreen^);
  165.     ScrOffset  := OFS(VirtualScreen^);
  166.  
  167.     InitWinScreen;                                                    PutDot;
  168.     InitWinTopLine;                                                   PutDot;
  169.     InitWin2ndLine;                                                   PutDot;
  170.     InitWinSamples;                                                   PutDot;
  171.     RefreshModuleInfo;                                                PutDot;
  172.     WITH wTopLine   DO SaveWindow(SegTopLine,      x,   y, w,   h-1); PutDot;
  173.     WITH wSamples   DO SaveWindow(SegSamples,      x,   y, w-1, h-1); PutDot;
  174.     WITH w2ndLine   DO SaveWindow(Seg2ndLine,      x,   y, w,   h-1); PutDot;
  175.  
  176.     IF SegOscillosc = NIL THEN
  177.       BEGIN
  178.  
  179.         InitWinMenus;                                                     PutDot;
  180.         InitWinPart;                                                      PutDot;
  181.  
  182.         WITH wMenus     DO SaveWindow(SegMenus,        x,   y, w,   h-1); PutDot;
  183.         WITH wPartSmall DO SaveWindow(SegSmallPart,    x,   y, w,   h  ); PutDot;
  184.  
  185.         InitWinOscillosc;                                                 PutDot;
  186.         InitWinPart;                                                      PutDot;
  187.         WITH wOscillosc DO SaveWindow(SegOscillosc,    x,   y, w,   h-1); PutDot;
  188.  
  189.         InitWinBigPart;                                                   PutDot;
  190.         WITH wPartBig   DO SaveWindow(SegBigPart,      x,   y, w,   h  ); PutDot;
  191.  
  192.         InitWinCredits;                                                   PutDot;
  193.         WITH wCredits   DO SaveWindow(SegCredits,      x,   y, w,   h  ); PutDot;
  194.  
  195.       END;
  196.  
  197.     ScrSegment := SaveSeg;
  198.     ScrOffset  := SaveOfs;
  199.  
  200.     NoDots := TRUE;
  201.  
  202.   END;
  203. *)
  204.  
  205. PROCEDURE DoDeactivate(VAR w: TWindow);
  206.   BEGIN
  207.     w.vis  := FALSE;
  208.     w.forz := FALSE;
  209.     w.act  := FALSE;
  210.   END;
  211.  
  212.  
  213. PROCEDURE DoActivate(VAR w: TWindow; VAR Handle: TSwapHandle);
  214.   BEGIN
  215.     Handle.Read(TempBuffer^, SizeOf(TempBuffer^));
  216.     RestoreWindow(POINTER(TempBuffer));
  217.     w.vis  := TRUE;
  218.     w.forz := TRUE;
  219.     w.act  := TRUE;
  220.   END;
  221.  
  222.  
  223. {
  224. PROCEDURE DoActivate(VAR w: TWindow; SavePtr: PAoW);
  225.   BEGIN
  226.     RestoreWindow(SavePtr);
  227.     w.vis  := TRUE;
  228.     w.forz := TRUE;
  229.     w.act  := TRUE;
  230.   END;
  231. }
  232.  
  233. PROCEDURE DeactivateWins(NewWins: WORD);
  234.   VAR
  235.     f : WORD;
  236.   BEGIN
  237.     f := (NOT NewWins) AND ActiveWindows;
  238.     IF (f AND wfTopLine)   <> 0 THEN DoDeactivate(wTopLine);
  239.     IF (f AND wf2ndLine)   <> 0 THEN DoDeactivate(w2ndLine);
  240.     IF (f AND wfSamples)   <> 0 THEN DoDeactivate(wSamples);
  241.     IF (f AND wfOscillosc) <> 0 THEN DoDeactivate(wOscillosc);
  242.     IF (f AND wfMenus)     <> 0 THEN DoDeactivate(wMenus);
  243.     IF (f AND wfSmallPart) <> 0 THEN DoDeactivate(wPartSmall);
  244.     IF (f AND wfBigPart)   <> 0 THEN DoDeactivate(wPartBig);
  245.     IF (f AND wfCredits)   <> 0 THEN DoDeactivate(wCredits);
  246.  
  247.     ActiveWindows := ActiveWindows AND NewWins;
  248.   END;
  249.  
  250.  
  251. PROCEDURE ActivateWins(NewWins: WORD);
  252.   VAR
  253.     f : WORD;
  254.   BEGIN
  255.     f := NewWins AND (NOT ActiveWindows) ;
  256.     IF (f AND wfTopLine)   <> 0 THEN   DoActivate(wTopLine,   TopLineHandle);
  257.     IF (f AND wf2ndLine)   <> 0 THEN   DoActivate(w2ndLine,   _2ndLineHandle);
  258.     IF (f AND wfSamples)   <> 0 THEN   DoActivate(wSamples,   SamplesHandle);
  259.     IF (f AND wfOscillosc) <> 0 THEN   DoActivate(wOscillosc, OscilloscHandle);
  260.     IF (f AND wfMenus)     <> 0 THEN   DoActivate(wMenus,     MenusHandle);
  261.     IF (f AND wfSmallPart) <> 0 THEN BEGIN
  262.                                        DoActivate(wPartSmall, SmallPartHandle);
  263.                                        SetSmallPartWindow;
  264.                                      END;
  265.     IF (f AND wfBigPart)   <> 0 THEN BEGIN
  266.                                        DoActivate(wPartBig,   BigPartHandle);
  267.                                        SetBigPartWindow;
  268.                                      END;
  269.     IF (f AND wfCredits)   <> 0 THEN   DoActivate(wCredits,   CreditsHandle);
  270.  
  271.     ActiveWindows := ActiveWindows OR NewWins;
  272.   END;
  273.  
  274.  
  275. PROCEDURE SetCredits;
  276.   BEGIN
  277.     DeactivateWins(CreditWins);
  278.     ActivateWins(CreditWins);
  279.   END;
  280.  
  281.  
  282. PROCEDURE SetBig;
  283.   BEGIN
  284.     DeactivateWins(BigWins);
  285.     ActivateWins(BigWins);
  286.   END;
  287.  
  288.  
  289. PROCEDURE SetSmall_Samples;
  290.   BEGIN
  291.     DeactivateWins(Small_SamplesWins);
  292.     ActivateWins(Small_SamplesWins);
  293.   END;
  294.  
  295.  
  296. PROCEDURE SetSmall_Oscillosc;
  297.   BEGIN
  298.     DeactivateWins(Small_OscilloscWins);
  299.     ActivateWins(Small_OscilloscWins);
  300.   END;
  301.  
  302.  
  303. PROCEDURE SetSmall_Menu;
  304.   BEGIN
  305.     DeactivateWins(Small_MenuWins);
  306.     ActivateWins(Small_MenuWins);
  307.   END;
  308.  
  309.  
  310. PROCEDURE SetNothing;
  311.   BEGIN
  312.     DeactivateWins(0);
  313.     ActivateWins(0);
  314.   END;
  315.  
  316.  
  317. PROCEDURE SetUser(w: WORD);
  318.   BEGIN
  319.     DeactivateWins(w);
  320.     ActivateWins(w);
  321.   END;
  322.  
  323.  
  324. PROCEDURE RefreshVTScreens;
  325.   VAR
  326.     i : WORD;
  327.   BEGIN
  328.     i := ActiveWindows;
  329.     SetUser(0);
  330.     SetUser(i);
  331.   END;
  332.  
  333.  
  334.  
  335.  
  336. END.
  337.